Autogenerated HTML docs for v1.7.4.1-415-g5e839 
diff --git a/RelNotes/1.7.5.txt b/RelNotes/1.7.5.txt index b917d0b..24f5d8c 100644 --- a/RelNotes/1.7.5.txt +++ b/RelNotes/1.7.5.txt 
@@ -15,6 +15,9 @@  * The codebase is getting prepared for i18n/l10n; no translated/translatable  strings in the code yet.   + * The bash completion script can now complete symmetric difference + for "git diff" command, e.g. "git diff ...bra<TAB>". +  * "git apply -v" reports offset lines when the patch does not apply at  the exact location recorded in the diff output.   @@ -43,6 +46,11 @@  reached, without spewing unnecessary error messages that complain about  the server response it never got.   + * "git fetch" vs "git upload-pack" transfer learned 'no-done' + protocol extension to save one round-trip after the content + negotiation is done. This saves one HTTP RPC, reducing the overall + latency for a trivial fetch. +  * "git grep -f <filename>" learned to treat "-" as "read from the  standard input stream".   @@ -52,6 +60,11 @@  * "git log" type commands now understand globbing pathspecs. You  can say "git log -- '*.txt'" for example.   + * "git log" family of commands learned --cherry and --cherry-mark + options that can be used to view two diverged branches while omitting + or highlighting equivalent changes that appear on both sides of a + symmetric difference (e.g. "log --cherry A...B"). +  * "git mergetool" learned how to drive "beyond compare 3" as well.    * "git rerere forget" without pathspec used to forget all the saved @@ -93,8 +106,22 @@  in the working tree that are in the way in order to check out paths  under it from the named branch (js/checkout-untracked-symlink).   + * "git fetch" from a client that is mostly following the remote + needlessly told all of its refs to the server for both sides to + compute the set of objects that need to be transferred efficiently, + instead of stopping when the server heard enough. In a project with + many tags, this turns out to be extremely wasteful, especially over + the smart HTTP transport (sp/maint-{upload,fetch}-pack-stop-early~1). + + * "git fetch" run from a repository that uses the same repository as + its alternate object store as the repository it is fetching from + did not tell the server that it already has access to objects + reachable from the refs in their common alternate object store, + causing it to fetch unnecessary objects (jc/maint-fetch-alt). +  ---  exec >/var/tmp/1  O=v1.7.4.1-352-gcdc3466 +O=v1.7.4.1-414-gaeb2aaa  echo O=$(git describe 'master')  git shortlog --no-merges ^maint ^$O master 
diff --git a/git-bisect.html b/git-bisect.html index db48733..bfc3b7f 100644 --- a/git-bisect.html +++ b/git-bisect.html 
@@ -642,27 +642,6 @@  </li>   <li>   <p>  -Automatically bisect a broken test suite:  -</p>  -<div class="listingblock">  -<div class="content">  -<pre><tt>$ cat ~/test.sh  -#!/bin/sh  -make || exit 125 # this skips broken builds  -make test # "make test" runs the test suite  -$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good  -$ git bisect run ~/test.sh</tt></pre>  -</div></div>  -<div class="paragraph"><p>Here we use a "test.sh" custom script. In this script, if "make"  -fails, we skip the current commit.</p></div>  -<div class="paragraph"><p>It is safer to use a custom script outside the repository to prevent  -interactions between the bisect, make and test processes and the  -script.</p></div>  -<div class="paragraph"><p>"make test" should "exit 0", if the test suite passes, and  -"exit 1" otherwise.</p></div>  -</li>  -<li>  -<p>   Automatically bisect a broken test case:   </p>   <div class="listingblock">  @@ -670,26 +649,64 @@  <pre><tt>$ cat ~/test.sh   #!/bin/sh   make || exit 125 # this skips broken builds  -~/check_test_case.sh # does the test case passes ?  +~/check_test_case.sh # does the test case pass?   $ git bisect start HEAD HEAD~10 -- # culprit is among the last 10   $ git bisect run ~/test.sh</tt></pre>   </div></div>  -<div class="paragraph"><p>Here "check_test_case.sh" should "exit 0" if the test case passes,  +<div class="paragraph"><p>Here we use a "test.sh" custom script. In this script, if "make"  +fails, we skip the current commit.  +"check_test_case.sh" should "exit 0" if the test case passes,   and "exit 1" otherwise.</p></div>  -<div class="paragraph"><p>It is safer if both "test.sh" and "check_test_case.sh" scripts are  +<div class="paragraph"><p>It is safer if both "test.sh" and "check_test_case.sh" are   outside the repository to prevent interactions between the bisect,   make and test processes and the scripts.</p></div>   </li>   <li>   <p>  -Automatically bisect a broken test suite:  +Automatically bisect with temporary modifications (hot-fix):  +</p>  +<div class="listingblock">  +<div class="content">  +<pre><tt>$ cat ~/test.sh  +#!/bin/sh  +  +# tweak the working tree by merging the hot-fix branch  +# and then attempt a build  +if git merge --no-commit hot-fix &amp;&amp;  + make  +then  + # run project specific test and report its status  + ~/check_test_case.sh  + status=$?  +else  + # tell the caller this is untestable  + status=125  +fi  +  +# undo the tweak to allow clean flipping to the next commit  +git reset --hard  +  +# return control  +exit $status</tt></pre>  +</div></div>  +<div class="paragraph"><p>This applies modifications from a hot-fix branch before each test run,  +e.g. in case your build or test environment changed so that older  +revisions may need a fix which newer ones have already. (Make sure the  +hot-fix branch is based off a commit which is contained in all revisions  +which you are bisecting, so that the merge does not pull in too much, or  +use <tt>git cherry-pick</tt> instead of <tt>git merge</tt>.)</p></div>  +</li>  +<li>  +<p>  +Automatically bisect a broken test case:   </p>   <div class="listingblock">   <div class="content">   <pre><tt>$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10   $ git bisect run sh -c "make || exit 125; ~/check_test_case.sh"</tt></pre>   </div></div>  -<div class="paragraph"><p>Does the same as the previous example, but on a single line.</p></div>  +<div class="paragraph"><p>This shows that you can do without a run script if you write the test  +on a single line.</p></div>   </li>   </ul></div>   </div>  @@ -704,7 +721,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-03-20 19:41:42 UTC  +Last updated 2011-03-23 05:39:52 UTC   </div>   </div>   </body>  
diff --git a/git-bisect.txt b/git-bisect.txt index 4b4b096..7b7bafb 100644 --- a/git-bisect.txt +++ b/git-bisect.txt 
@@ -279,53 +279,68 @@  $ git bisect run make test # "make test" builds and tests  ------------   -* Automatically bisect a broken test suite: -+ ------------- -$ cat ~/test.sh -#!/bin/sh -make || exit 125 # this skips broken builds -make test # "make test" runs the test suite -$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good -$ git bisect run ~/test.sh ------------- -+ -Here we use a "test.sh" custom script. In this script, if "make" -fails, we skip the current commit. -+ -It is safer to use a custom script outside the repository to prevent -interactions between the bisect, make and test processes and the -script. -+ -"make test" should "exit 0", if the test suite passes, and -"exit 1" otherwise. -  * Automatically bisect a broken test case:  +  ------------  $ cat ~/test.sh  #!/bin/sh  make || exit 125 # this skips broken builds -~/check_test_case.sh # does the test case passes ? +~/check_test_case.sh # does the test case pass?  $ git bisect start HEAD HEAD~10 -- # culprit is among the last 10  $ git bisect run ~/test.sh  ------------  + -Here "check_test_case.sh" should "exit 0" if the test case passes, +Here we use a "test.sh" custom script. In this script, if "make" +fails, we skip the current commit. +"check_test_case.sh" should "exit 0" if the test case passes,  and "exit 1" otherwise.  + -It is safer if both "test.sh" and "check_test_case.sh" scripts are +It is safer if both "test.sh" and "check_test_case.sh" are  outside the repository to prevent interactions between the bisect,  make and test processes and the scripts.   -* Automatically bisect a broken test suite: +* Automatically bisect with temporary modifications (hot-fix): ++ +------------ +$ cat ~/test.sh +#!/bin/sh + +# tweak the working tree by merging the hot-fix branch +# and then attempt a build +if	git merge --no-commit hot-fix && +	make +then +	# run project specific test and report its status +	~/check_test_case.sh +	status=$? +else +	# tell the caller this is untestable +	status=125 +fi + +# undo the tweak to allow clean flipping to the next commit +git reset --hard + +# return control +exit $status +------------ ++ +This applies modifications from a hot-fix branch before each test run, +e.g. in case your build or test environment changed so that older +revisions may need a fix which newer ones have already. (Make sure the +hot-fix branch is based off a commit which is contained in all revisions +which you are bisecting, so that the merge does not pull in too much, or +use `git cherry-pick` instead of `git merge`.) + +* Automatically bisect a broken test case:  +  ------------  $ git bisect start HEAD HEAD~10 -- # culprit is among the last 10  $ git bisect run sh -c "make || exit 125; ~/check_test_case.sh"  ------------  + -Does the same as the previous example, but on a single line. +This shows that you can do without a run script if you write the test +on a single line.    SEE ALSO  -------- 
diff --git a/git-log.html b/git-log.html index 18b0f2f..44beed0 100644 --- a/git-log.html +++ b/git-log.html 
@@ -754,6 +754,15 @@  </p>   </dd>   <dt class="hdlist1">  +--cherry-mark  +</dt>  +<dd>  +<p>  + Like <tt>--cherry-pick</tt> (see below) but mark equivalent commits  + with <tt>=</tt> rather than omitting them, and inequivalent ones with <tt>+</tt>.  +</p>  +</dd>  +<dt class="hdlist1">   --cherry-pick   </dt>   <dd>  @@ -771,6 +780,36 @@  excluded from the output.</p></div>   </dd>   <dt class="hdlist1">  +--left-only  +</dt>  +<dt class="hdlist1">  +--right-only  +</dt>  +<dd>  +<p>  + List only commits on the respective side of a symmetric range,  + i.e. only those which would be marked <tt>&lt;</tt> resp. <tt>&gt;</tt> by  + <tt>--left-right</tt>.  +</p>  +<div class="paragraph"><p>For example, <tt>--cherry-pick --right-only A&#8230;B</tt> omits those  +commits from <tt>B</tt> which are in <tt>A</tt> or are patch-equivalent to a commit in  +<tt>A</tt>. In other words, this lists the <tt>&#43;</tt> commits from <tt>git cherry A B</tt>.  +More precisely, <tt>--cherry-pick --right-only --no-merges</tt> gives the exact  +list.</p></div>  +</dd>  +<dt class="hdlist1">  +--cherry  +</dt>  +<dd>  +<p>  + A synonym for <tt>--right-only --cherry-mark --no-merges</tt>; useful to  + limit the output to the commits on our side and mark those that  + have been applied to the other side of a forked history with  + <tt>git log --cherry upstream&#8230;mybranch</tt>, similar to  + <tt>git cherry upstream mybranch</tt>.  +</p>  +</dd>  +<dt class="hdlist1">   -g   </dt>   <dt class="hdlist1">  
diff --git a/git-rev-list.html b/git-rev-list.html index 671f962..521aadf 100644 --- a/git-rev-list.html +++ b/git-rev-list.html 
@@ -437,6 +437,9 @@  [ --parents ]   [ --timestamp ]   [ --left-right ]  + [ --left-only ]  + [ --right-only ]  + [ --cherry-mark ]   [ --cherry-pick ]   [ --encoding[=&lt;encoding&gt;] ]   [ --(author|committer|grep)=&lt;pattern&gt; ]  @@ -747,6 +750,15 @@  </p>   </dd>   <dt class="hdlist1">  +--cherry-mark  +</dt>  +<dd>  +<p>  + Like <tt>--cherry-pick</tt> (see below) but mark equivalent commits  + with <tt>=</tt> rather than omitting them, and inequivalent ones with <tt>+</tt>.  +</p>  +</dd>  +<dt class="hdlist1">   --cherry-pick   </dt>   <dd>  @@ -764,6 +776,36 @@  excluded from the output.</p></div>   </dd>   <dt class="hdlist1">  +--left-only  +</dt>  +<dt class="hdlist1">  +--right-only  +</dt>  +<dd>  +<p>  + List only commits on the respective side of a symmetric range,  + i.e. only those which would be marked <tt>&lt;</tt> resp. <tt>&gt;</tt> by  + <tt>--left-right</tt>.  +</p>  +<div class="paragraph"><p>For example, <tt>--cherry-pick --right-only A&#8230;B</tt> omits those  +commits from <tt>B</tt> which are in <tt>A</tt> or are patch-equivalent to a commit in  +<tt>A</tt>. In other words, this lists the <tt>&#43;</tt> commits from <tt>git cherry A B</tt>.  +More precisely, <tt>--cherry-pick --right-only --no-merges</tt> gives the exact  +list.</p></div>  +</dd>  +<dt class="hdlist1">  +--cherry  +</dt>  +<dd>  +<p>  + A synonym for <tt>--right-only --cherry-mark --no-merges</tt>; useful to  + limit the output to the commits on our side and mark those that  + have been applied to the other side of a forked history with  + <tt>git log --cherry upstream&#8230;mybranch</tt>, similar to  + <tt>git cherry upstream mybranch</tt>.  +</p>  +</dd>  +<dt class="hdlist1">   -g   </dt>   <dt class="hdlist1">  @@ -1945,7 +1987,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-03-15 23:30:14 UTC  +Last updated 2011-03-23 05:39:52 UTC   </div>   </div>   </body>  
diff --git a/git-rev-list.txt b/git-rev-list.txt index 5ce4d7f..b08dfbc 100644 --- a/git-rev-list.txt +++ b/git-rev-list.txt 
@@ -31,6 +31,9 @@  [ \--parents ]  [ \--timestamp ]  [ \--left-right ] + [ \--left-only ] + [ \--right-only ] + [ \--cherry-mark ]  [ \--cherry-pick ]  [ \--encoding[=<encoding>] ]  [ \--(author|committer|grep)=<pattern> ] 
diff --git a/rev-list-options.txt b/rev-list-options.txt index 09860de..5c6850f 100644 --- a/rev-list-options.txt +++ b/rev-list-options.txt 
@@ -151,6 +151,11 @@ 	to /dev/null as the output does not have to be formatted.  endif::git-rev-list[]   +--cherry-mark:: + +	Like `--cherry-pick` (see below) but mark equivalent commits +	with `=` rather than omitting them, and inequivalent ones with `+`. +  --cherry-pick::   	Omit any commit that introduces the same change as @@ -165,6 +170,27 @@  from branch A). With this option, such pairs of commits are  excluded from the output.   +--left-only:: +--right-only:: + +	List only commits on the respective side of a symmetric range, +	i.e. only those which would be marked `<` resp. `>` by +	`--left-right`. ++ +For example, `--cherry-pick --right-only A...B` omits those +commits from `B` which are in `A` or are patch-equivalent to a commit in +`A`. In other words, this lists the `{plus}` commits from `git cherry A B`. +More precisely, `--cherry-pick --right-only --no-merges` gives the exact +list. + +--cherry:: + +	A synonym for `--right-only --cherry-mark --no-merges`; useful to +	limit the output to the commits on our side and mark those that +	have been applied to the other side of a forked history with +	`git log --cherry upstream...mybranch`, similar to +	`git cherry upstream mybranch`. +  -g::  --walk-reflogs::